/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package eeep.dao;

import eeep.entidades.Curso;
import eeep.entidades.Escola;
import eeep.entidades.Materia;
import eeep.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Joao
 */
public class CursoDAO {
    
    public void salvarCurso(Curso curso){
        String sql = "INSERT INTO curso(nome_curso,quantidade_curso,id_escola) "
                     + "VALUES(?,?,"
                     + "(Select id_escola From escola "
                     + "Where login_escola = ?))";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, curso.getNome_curso());
            pstm.setInt(2, curso.getQuantidade_curso());
            pstm.setString(3, curso.getEscola().getLogin());
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public Curso getCursoPorNome(Curso aux){
        String sql = "SELECT nome_curso,quantidade_curso "
                + "FROM curso as c,escola as e where nome_curso=?"
                + "and c.id_escola=e.id_escola and login_escola=?";

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, aux.getNome_curso());
                        pstm.setString(2, aux.getEscola().getLogin());
			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados 
                        while (rset.next()) {

				Curso curso = new Curso();
				

				// Recupera o nome do banco e atribui ele ao objeto

                                curso.setNome_curso(rset.getString("nome_curso"));
                                curso.setQuantidade_curso(rset.getInt("quantidade_curso"));
				return curso;
			}
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    
    public ArrayList <Curso> getCursoLogin(String login){
        String sql = "SELECT nome_curso,quantidade_curso FROM escola as e,curso as c"
                + "where e.id_escola=c.id_escola and login_escola= ?";

		

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, login);

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
			ArrayList <Curso> lista = new ArrayList(); 
                        while (rset.next()) {

				Curso curso = new Curso();
				

				// Recupera o nome do banco e atribui ele ao objeto

                                curso.setNome_curso(rset.getString("nome_curso"));
                                curso.setQuantidade_curso(rset.getInt("quantidade_curso"));
				lista.add(curso);
			}
                        return lista;
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    
     public ArrayList <Materia> getMateriaPesoCurso(String login,String curso){
        String sql = "Select nome_materia From materia as m,curso as c,escola as e,\n" +
                     "materia_peso_curso as mp\n" +
                     "Where mp.id_materia=m.id_materia and mp.id_curso=c.id_curso\n" +
                     "and c.id_escola=e.id_escola and\n" +
                     "nome_curso=? and login_escola=?";

		

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, curso);
                        pstm.setString(2, login);

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
			ArrayList <Materia> lista = new ArrayList(); 
                        while (rset.next()) {

				Materia materia=new Materia();
				

				// Recupera o nome do banco e atribui ele ao objeto

                                materia.setNome_materia(rset.getString("nome_materia"));
				lista.add(materia);
			}
                        return lista;
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    public void deleteCurso(Curso curso){
        String sql = "Delete From curso "
                + "Where id_curso=(SELECT nome_curso,quantidade_curso "
                + "FROM curso as c,escola as e where nome_curso=?"
                + "and c.id_escola=e.id_escola and login_escola=?)";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, curso.getNome_curso());
            pstm.setString(2, curso.getEscola().getLogin());
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public void atualizarCurso(Curso curso,String nome,String login){
        String sql = "Update curso Set nome_curso=?,quantidade_curso=?"
                     + "Where id_curso=(SELECT nome_curso,quantidade_curso "
                + "FROM curso as c,escola as e where nome_curso=?"
                + "and c.id_escola=e.id_escola and login_escola=?)";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, curso.getNome_curso());
            pstm.setInt(2, curso.getQuantidade_curso());
            pstm.setString(3, nome);
            pstm.setString(4, login);

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
}
